﻿// -------------------------------------------------------------------------
//    @FileName         :    NFPackageUtil.h
//    @Author           :    gaoyi
//    @Date             :    24-8-29
//    @Email            :    445267987@qq.com
//    @Module           :    NFPackageUtil
//
// -------------------------------------------------------------------------

// --- 文件总结 ---------------------------------------------------------------
// `NFPackageUtil` 是背包工具类：
// - 提供背包相关的静态工具函数
// - 包括整理背包、添加经验、添加公会值、发送物品通知等
// ---------------------------------------------------------------------------

#pragma once

#include <NFLogicCommon/BagPage/NFBagPageOpDefine.h>
#include <proto_cs.pb.h>
#include <NFLogicCommon/NFItemDefine.h>

class NFPlayer;

/**
 * @brief 背包工具类
 * 提供背包相关的静态工具函数
 */
class NFPackageUtil
{
public:
    /**
     * @brief 整理背包
     * @param pPlayer 玩家指针
     * @param iPage 页签索引
     * @param rsp 输出响应消息
     * @return 0成功，非0失败
     */
    static int Arrage(NFPlayer* pPlayer, int iPage, proto_ff::Proto_CSBagGridArrangeRsp* rsp);

public:
    /**
     * @brief 添加经验
     * @param pPlayer 玩家指针
     * @param iExpID 经验ID
     * @param iNum 经验数量
     * @param ntf 输出通知消息
     * @param eReason 变更原因
     * @param iReasonParam 原因参数
     * @return 0成功，非0失败
     */
    static int AddExp(NFPlayer* pPlayer, uint32_t iExpID, uint32_t iNum, proto_ff::Proto_CSRoleItemNtf* ntf, proto_ff::enItemChangeReason eReason, int iReasonParam);
    
    /**
     * @brief 添加公会值
     * @param pPlayer 玩家指针
     * @param iID 公会值ID
     * @param iNum 数量
     * @param iTotalNum 总数量（默认0）
     * @return 0成功，非0失败
     */
    static int AddGuildValue(NFPlayer* pPlayer, uint32_t iID, int iNum, uint64_t iTotalNum = 0);

public:
    /**
     * @brief 发送物品通知
     * @param pPlayer 玩家指针
     * @param rsp 响应消息
     * @return 0成功，非0失败
     */
    static int SendItemNtf(NFPlayer* pPlayer, proto_ff::Proto_CSRsp& rsp);
};
